package com.zengjianjun.hadoop.demo.executor.mapReduce;

import lombok.extern.slf4j.Slf4j;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;

import java.io.IOException;


/**
 * 处理Map传入的内容
 *
 * @author zengjianjun
 */
@Slf4j
public class WordCountReduce extends Reducer<Text, IntWritable, Text, IntWritable> {

    private final IntWritable result = new IntWritable();

    /**
     * @param key     第一个Text: 是传入的单词名称，是Mapper中传入的
     * @param values  第二个：LongWritable 是该单词出现了多少次，这个是MapReduce计算出来的，比如 hello出现了11次
     * @param context 第三个Text: 是输出单词的名称 ，这里是要输出到文本中的内容
     * @throws IOException          异常
     * @throws InterruptedException 异常
     */
    @Override
    public void reduce(Text key, Iterable<IntWritable> values, Context context)
            throws IOException, InterruptedException {
        int sum = 0;
        for (IntWritable val : values) {
            sum += val.get();
        }
        result.set(sum);
        if (key != null) {
            context.write(key, result);
            log.info("[{}]统计分词数量: {}", key, sum);
        }
    }
}
